SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[parPlazasconDiasdeClaseCUISEANIO]

@CUISE INT ,
@AñoAnalizar INT 
--SET @Cuise = 2131
--SET @AñoAnalizar = 2007 
AS

DELETE FROM Tb_PlazasControlDias WHERE CUISE = @Cuise
----------------------------------------------------

DECLARE @IdPlazaAnalizar INT
DECLARE @ContadorDia INT
DECLARE @IdPlaza INT 
DECLARE @CUPOF VARCHAR(100)
DECLARE @Subservicio INT 
DECLARE @FechaAltaControl DATETIME
DECLARE @FechaBajaControl DATETIME

DECLARE @FechaAlta DATETIME 
DECLARE @FechaBaja DATETIME 
DECLARE @FechaBajaPlaza DATETIME 



DECLARE PlazasAnalizar CURSOR FOR 

		-- Toma las Plazas para un CUISE activas y con funcion Frente a Alumnos
		SELECT P.idPlaza, P.CUPOF, P.FechaBaja  
	      FROM tb_Plazas P
	       INNER JOIN tb_Organizaciones O ON o.idOrganizaciones = P.Organizacion 
	       WHERE O.CUISE = @CUISE
	  		  AND (P.FechaBaja IS NULL OR YEAR(P.FechaBaja) >= @AñoAnalizar)
		 	  AND Funcion IN (SELECT IdFuncion FROM tb_Funciones WHERE TipoDeFuncion IN (12, 13, 15))
		   ORDER BY P.Funcion, P.Cupof
		

OPEN PlazasAnalizar

FETCH NEXT FROM PlazasAnalizar INTO @IdPlaza, @CUPOF, @FechaBajaPlaza
   
   WHILE @@FETCH_STATUS = 0 
   		BEGIN 
		  
			 
		  
			SET @IdPlazaAnalizar = @IdPlaza --386114 --
			
					
			DECLARE MovimientosFecha CURSOR FOR 
				SELECT SS.IdSubservicio, SS.FechaAlta,isnull(SS.FechaBaja, '31/12/'+CONVERT(VARCHAR(4), @AñoAnalizar))
				FROM tb_ServiciosAgentes s
				INNER JOIN tb_SubserviciosAgentes SS ON S.IdServicioAgente = SS.ServicioAgente 
				WHERE SS.Plaza = @IdPlazaAnalizar AND Ss.SituacionLaboral = 5 AND ss.SituacionExtraordinaria = 1
				  AND (YEAR(SS.FechaAlta) = @AñoAnalizar OR  (YEAR(SS.FechaAlta) <= @AñoAnalizar AND YEAR(isnull(SS.FechaBaja, '31/12/'+CONVERT(VARCHAR(4), @AñoAnalizar))) = @AñoAnalizar))				
				ORDER BY SS.FechaAlta 
				   
			OPEN MovimientosFecha    
				
				FETCH NEXT FROM MovimientosFecha INTO @Subservicio, @FechaAlta, @FechaBaja			   
      			
      			WHILE @@FETCH_STATUS = 0
      				BEGIN 
      		  			IF year(@FechaALta) < @AñoAnalizar  
	      		  			SET @FechaAltaControl = '01/01/'+ convert(VARCHAR(4),@AñoAnalizar)
	      		  		ELSE	
	      		  			SET @FechaAltaControl = @FechaAlta

      		  			IF year(@FechaBaja) > @AñoAnalizar  
	      		  			SET @FechaBajaControl = '31/12/'+ convert(VARCHAR(4),@AñoAnalizar)
	      		  		ELSE	
	      		  			SET @FechaBajaControl = @FechaBaja
	      		  			
	      		  		
	      		  		PRINT 'Entre'+convert(VARCHAR(20),@FechaAltaControl)
				
						WHILE @FechaAltaControl  <= @FechaBajaControl
					 	 BEGIN 
					   		 SET @ContadorDia = year(@FechaAltaControl)*10000+month(@FechaAltaControl)*100+day(@FechaAltaControl) 
			                 
			                 IF NOT EXISTS(SELECT TOP 1 TimeID FROM Tb_PlazasControlDias WHERE TimeID =  @ContadorDia AND IdPlaza = @IdPlazaAnalizar )
					 		   	INSERT INTO Tb_PlazasControlDias (TimeID,CUISE,IdPlaza,Clase)  VALUES (@ContadorDia, @Cuise, @IdPlazaAnalizar, 1)
					 		   	 
							 SET @FechaAltaControl = dateadd(day,1,@FechaAltaControl)  
							 
							 				     
  					  	 END					     

	      		  		PRINT 'Sali'+convert(VARCHAR(20),@FechaBajaControl)
      	
	    	 		    FETCH NEXT FROM MovimientosFecha INTO @Subservicio,@FechaAlta, @FechaBaja			   
      				END 
      				
      			CLOSE MovimientosFecha
      			
      			DEALLOCATE MovimientosFecha
   		    
			FETCH NEXT FROM PlazasAnalizar INTO @IdPlaza, @CUPOF, @FechaBajaPlaza
   		END 

CLOSE PlazasAnalizar

DEALLOCATE PlazasAnalizar


DECLARE @DiasPeriodoLectivo INT 


-- Esto te da los dias laborables de un año - solo esta para el 2007, falta feriados (fijate los dias que dicen Laborable='N'

SELECT @DiasPeriodoLectivo= count(TIMEID) FROM Tb_Tiempo WHERE Anio=@AñoAnalizar AND Laborable = 'S'

-- Esto te da los dias sin clase por CUPOF - Resta 195 - los dias con clase
SELECT CD.IdPlaza, CD.CUISE, O.Nombre, L.localidad ,P.CUPOF, F.Descripcion AS Funcion, @DiasPeriodoLectivo-count(cd.TimeID) DiasSinClase, (((@DiasPeriodoLectivo-count(cd.TimeID))*100)/@DiasPeriodoLectivo)
   FROM Tb_PlazasControlDias CD
     INNER JOIN tb_Plazas P ON P.idPlaza = CD.IdPlaza 
     INNER JOIN tb_Funciones F On F.idFuncion = P.Funcion
     INNER JOIN Tb_Tiempo T ON T.TimeID = CD.TimeID AND T.Laborable = 'S'
     INNER JOIN tb_Organizaciones O ON O.CUISE = CD.CUISE
     INNER JOIN tb_Localidades L ON L.idLocalidad=O.Localidad
     WHERE P.CUISE = @Cuise  
   GROUP BY CD.IdPlaza, CD.CUISE,O.Nombre, L.localidad, P.CUPOF, F.Descripcion
GO
